package dao.mysql;

import dal.Conexion;
import dao.AvionDao;
import dto.Avion;
import java.sql.ResultSet;
import java.util.Vector;
import org.apache.log4j.Logger;

/**
 *
 * @author Jose Carlos Gutierrez
 */
public class AvionDaoMySQL extends AvionDao{

    private static Logger log = Logger.getLogger(AvionDaoMySQL.class);

    @Override
    public void update() throws Exception {
        Conexion objConexion = Conexion.getOrCreate();
        StringBuffer query = new StringBuffer("SELECT FN_UPDATE_AVIONES(");
        query.append(objDto.getId()).append(",'");
        query.append(objDto.getCodigoAvion()).append("',");
        query.append(objDto.getPerformance()).append(",");
        query.append(objDto.getCapacidadCombustible()).append(",");
        query.append(objDto.getVelocidadPromedio()).append(",");
        query.append(objDto.getIdConcurrencia()).append(") ID");
        ResultSet objResultSet = objConexion.ejecutar(query.toString());
        objResultSet.next();
        int id = objResultSet.getInt("ID");
        if(id > 0)
            objDto.setId(id);
        else{
            objConexion.desconectar();
            log.error("Erro al actualizar: "+query.toString());
            throw new Exception();
        }
        objConexion.desconectar();
    }

    @Override
    public void delete() {
        Conexion objConexion = Conexion.getOrCreate();
        try {
            StringBuffer query = new StringBuffer("SELECT FN_DELETE_AVION(");
            query.append(this.objDto.getId()).append(",");
            query.append(this.objDto.getIdConcurrencia()).append(") ROWS_AFECTED");
            ResultSet objResultSet = objConexion.ejecutar(query.toString());
            objResultSet.next();
            int id = objResultSet.getInt("ROWS_AFECTED");
            if(id > 0)
                objDto.setId(id);
            else{
                objConexion.desconectar();
                throw new Exception();
            }
            objConexion.desconectar();
        } catch (Exception e) {
        }
    }

    @Override
    public Vector<Avion> selectTodos() {
        Conexion objConexion = Conexion.getOrCreate();
        Vector<Avion> objVector = new Vector<Avion>();
        try {
            String query = "SELECT * FROM tbl_aviones";
            ResultSet objResultSet = objConexion.ejecutar(query);
           
            while(objResultSet.next()){
                int id = objResultSet.getInt("ID");
                String codigoAvion = objResultSet.getString("CODIGO_AVION");
                double performance = objResultSet.getDouble("PERFORMANCE");
                double capacidadCombustible = objResultSet.getDouble("CAPACIDAD_COMBUSTIBLE");
                double velocidadPromedio = objResultSet.getInt("VELOCIDAD_PROMEDIO");
                int idConcurrencia = objResultSet.getInt("ID_CONCURRENCIA");
                
                Avion objAvion = new Avion();
                objAvion.setId(id);
                objAvion.setCodigoAvion(codigoAvion);
                objAvion.setPerformance(performance);
                objAvion.setCapacidadCombustible(capacidadCombustible);
                objAvion.setVelocidadPromedio(velocidadPromedio);
                objAvion.setIdConcurrencia(idConcurrencia);
                
                objVector.addElement(objAvion);
            }
        } catch (Exception e) {
        }
        
        return objVector;
    }

    @Override
    public Avion select(int id) {
        Conexion objConexion = Conexion.getOrCreate();
        try {
            String query = "SELECT * FROM tbl_aviones WHERE id ="+id;
            ResultSet objResultSet = objConexion.ejecutar(query);

            if(objResultSet.next()){
                id = objResultSet.getInt("ID");
                String codigoAvion = objResultSet.getString("CODIGO_AVION");
                double performance = objResultSet.getDouble("PERFORMANCE");
                double capacidadCombustible = objResultSet.getDouble("CAPACIDAD_COMBUSTIBLE");
                double velocidadPromedio = objResultSet.getInt("VELOCIDAD_PROMEDIO");
                int idConcurrencia = objResultSet.getInt("ID_CONCURRENCIA");

                Avion objAvion = new Avion();
                objAvion.setId(id);
                objAvion.setCodigoAvion(codigoAvion);
                objAvion.setPerformance(performance);
                objAvion.setCapacidadCombustible(capacidadCombustible);
                objAvion.setVelocidadPromedio(velocidadPromedio);
                objAvion.setIdConcurrencia(idConcurrencia);

                return objAvion;
            }
        } catch (Exception e) {
        }

        return null;
    }

}
